# Remote Direct Memory Access (RDMA) per dispositivi Ethernet Intel®

RDMA (Remote Direct Memory Access) consente a un dispositivo di rete di trasferire dati direttamente dalla memoria di un'applicazione di un altro sistema e viceversa, aumentando il throughput e riducendo la latenza in determinati ambienti di rete.

- I dispositivi Ethernet Intel® serie 800 supportano sia iWARP che RoCEv2.
- I dispositivi Ethernet Intel® serie X722 supportano solo iWARP.

La differenza principale è che iWARP esegue RDMA su TCP, mentre RoCEv2 usa UDP.

Sui dispositivi con funzionalità RDMA, RDMA è supportato sui seguenti sistemi operativi:

- Linux*
- FreeBSD*
- VMware* ESXi*
- Microsoft* Windows Server*

Per evitare il degrado delle prestazioni causato dai pacchetti ignorati, abilitare il controllo del flusso a livello di collegamento o il controllo del flusso di priorità su tutti gli switch e le interfacce di rete.

| NOTE: Nei sistemi in cui gira il sistema operativo Microsoft Windows Server, l'abilitazione del controllo del flusso di priorità/*QoS disabilita il controllo del flusso di livello del collegamento. I dispositivi con tecnologia Ethernet Intel® serie 800 non supportano RDMA quando operano in modalità multiporta con più di 4 porte. Sui sistemi Linux, RDMA e bonding non sono compatibili. Se RDMA è attivato, il bonding non funzionerà.

## RDMA su Linux o FreeBSD

Per i dispositivi Ethernet Intel che supportano RDMA su Linux o FreeBSD, utilizza i driver indicati nella seguente tabella.

Dispositivo | Linux | FreeBSD | Protocolli supportati
--- | --- | --- | ---
Driver di base | Driver RDMA | Driver di base | Driver RDMA
Ethernet Intel® serie 800 | ice | irdma | ice | irdma | RoCEv2, iWARP
Ethernet Intel® serie X722 | i40e | irdma | ixl | iw_ixl | iWARP

##### Istruzioni di base per l'installazione

Ad un alto livello, l'installazione e la configurazione di RDMA su Linux o FreeBSD consiste nei seguenti passaggi. Leggi il file README all'interno del tarball del driver RDMA appropriato per maggiori dettagli.

1. Installare il driver di base.
2. Installare il driver RDMA.
3. Installare ed eseguire le patch di tutte le librerie RDMA in modalità utente. I passaggi esatti variano a seconda del sistema operativo; fare riferimento al file readme del driver RDMA per maggiori dettagli.
4. Abilitare il controllo del flusso sul dispositivo. Fare riferimento al README del driver di base per maggiori dettagli e per le modalità supportate.
5. Se si utilizza RoCE, abilitare il controllo del flusso (PFC o LFC) sul dispositivo e l'endpoint a cui il sistema è connesso. Scopri la documentazione di switch e, per Linux, la Guida alla configurazione del controllo del flusso di Linux Ethernet Intel® serie 800 per i casi di utilizzo RDMA per maggiori dettagli.

### RDMA per ambienti virtualizzati in Linux

I dispositivi basati sulla serie Ethernet Intel 800 supportano RDMA in una VF Linux su host Windows o Linux supportati. Per ulteriori informazioni su come caricare e configurare RDMA in una VF Linux, fare riferimento al file README all'interno del tarball dei driver RDMA di Linux.

## RDMA su Microsoft Windows

### RDMA per applicazioni in modalità utente Network Direct (ND)

Network Direct (ND) consente alle applicazioni in modalità utente di utilizzare le funzioni di RDMA.

| NOTA: le applicazioni in modalità utente potrebbero avere dei prerequisiti come il pacchetto Microsoft HPC o Intel MPI Library. Per ulteriori dettagli, fare riferimento alla documentazione dell'applicazione.

#### Installazione di RDMA modalità utente

Intel® Ethernet User Mode RDMA Provider è supportato su Microsoft Windows Server 2012 R2 o versione successiva.

Seguire questi passaggi per installare le funzioni di Network Direct in modalità utente.

1. Dal supporto di installazione, eseguire Autorun.exe per avviare il programma di installazione, quindi scegliere "Installa i driver e il software" e accettare il contratto di licenza.
2. Nella schermata Opzioni di installazione, selezionare "Intel® Ethernet User Mode RDMA Provider".
3. Nella schermata Opzioni di configurazione RDMA, selezionare "Abilitare il routing RDMA su subnet IP", se desiderato. Notare che quest'opzione, poiché è applicabile anche alla funzionalità Network Direct Kernel, viene visualizzata durante l'installazione dei driver di base anche se RDMA modalità utente non era stato selezionato.
4. Se Windows Firewall è installato e attivo, selezionare "Creare una regola di Intel® Ethernet RDMA Port Mapping Service in Windows Firewall" e le reti a cui applicare la regola.

   | NOTA: se Windows Firewall è disabilitato o si sta utilizzando un firewall di terze parti, la regola dovrà essere aggiunta manualmente.

5. Continuare con l'installazione dei driver e del software.

### RDMA Network Direct Kernel (NDK)

La funzionalità RDMA Network Direct Kernel (NDK) è inclusa nei driver di rete di base Intel e non richiede che siano installate funzioni aggiuntive.

#### Routing RDMA su subnet IP

Se si vuole che la funzionalità RDMA di NDK sia utilizzata in tutte le subnet, è necessario selezionare "Abilitare il routing RDMA su subnet IP" nella schermata Opzioni di configurazione RDMA durante l'installazione dei driver di base.

### Abilitazione del PFC (Priority Flow Control) su un sistema operativo Microsoft Windows Server

Per evitare il degrado delle prestazioni causato dai pacchetti ignorati, abilitare il PFC (Priority Flow Control) o il controllo del flusso a livello di collegamento su tutti gli switch e le interfacce di rete.

| NOTA: nei sistemi in cui gira il sistema operativo Microsoft Windows Server, l'abilitazione del controllo del flusso di priorità/*QoS disabilita il controllo del flusso di livello del collegamento.

Per abilitare il PFC su Microsoft Windows Server, è necessario utilizzare i seguenti comandi di PowerShell*:

`Install-WindowsFeature -Name Data-Center-Bridging -IncludeManagementTools
New-NetQoSPolicy "SMB" -NetDirectPortMatchCondition 445 -PriorityValue8021Action 3
Enable-NetQosFlowControl -Priority 3
Disable-NetQosFlowControl -Priority 0,1,2,4,5,6,7
New-NetQosTrafficClass -Name "SMB" -Priority 3 -BandwidthPercentage 60 -Algorithm ETS
Set-NetQosDcbxSetting -Willing $FALSE
Enable-NetAdapterQos -Name "Slot1 4 2 Port 1"`

### Verifica del funzionamento di RDMA con Microsoft PowerShell

È possibile controllare che RDMA sia abilitato sulle interfacce di rete utilizzando il seguente comando Microsoft PowerShell:

`Get-NetAdapterRDMA`

Utilizzare il seguente comando PowerShell per controllare se le interfacce di rete sono compatibili con RDMA e se il multicanale è abilitato:

`Get-SmbClientNetworkInterface`

Utilizzare il seguente comando PowerShell per controllare se Network Direct è abilitato nel sistema operativo:

`Get-NetOffloadGlobalSetting | Select NetworkDirect`

Utilizzare netstat per accertarsi che ogni interfaccia di rete compatibile con RDMA abbia un ascoltatore alla porta 445 (i sistemi operativi dei client Windows che supportano RDMA potrebbero non pubblicare ascoltatori). Ad esempio:

`netstat.exe -xan | ? {$_ -match "445"}`

### RDMA per ambienti virtualizzati in Windows

Per abilitare le funzionalità RDMA sulle schede di rete virtuali collegate a un VMSwitch, è necessario:

- Abilitare le proprietà avanzate di SR-IOV (Single Root IO Virtualization) e VMQ (Virtual Machine Queues) su ogni porta.
- Impostare il numero di VF per abilitare con le funzionalità RDMA. È possibile abilitare fino a 32 VF con funzionalità RDMA.

In determinate circostanze, è possibile disabilitare queste impostazioni di default. Queste opzioni possono essere impostate manualmente nel pannello delle impostazioni della scheda di rete di Intel PROSet ACU, nella scheda Avanzate della finestra di dialogo delle proprietà della scheda di rete oppure utilizzando i seguenti comandi PowerShell:

`Set-NetAdapterAdvancedProperty -Name <nome_nic> -RegistryKeyword *SRIOV -RegistryValue 1`

`Set-NetAdapterAdvancedProperty -Name <nome_nic> -RegistryKeyword *VMQ -RegistryValue 1`

`Set-NetAdapterAdvancedProperty -Name <nic_name> -RegistryKeyword RdmaMaxVfsEnabled -RegistryValue <1-32>`

### Configurazione del supporto guest di RDMA (modalità 3 di NDK)

La modalità 3 di NDK consente ai componenti Windows in modalità kernel di utilizzare le funzioni RDMA all'interno delle partizioni guest Hyper-V. Per abilitare la modalità 3 di NDK su un dispositivo Ethernet Intel®, procedere come indicato di seguito:

1. Abilitare SR-IOV nel BIOS o UEFI del sistema.
2. Abilitare l'impostazione avanzata SR-IOV sul dispositivo.
3. Abilitare SR-IOV sul VMSwitch associato al dispositivo eseguendo i seguenti comandi per tutte le funzioni fisiche sullo stesso dispositivo:
   `New-VMSwitch -Name <nome_switch> -NetAdapterName <nome_dispositivo>`
   `-EnableIov $true`
4. Configurare il numero di funzioni virtuali (VF) RDMA sul dispositivo impostando l'opzione avanzata "RdmaMaxVfsEnabled". Tutte le funzioni fisiche devono essere impostate sullo stesso valore. Il valore è il numero massimo di funzioni virtuali (VF) che sono in grado di utilizzare contemporaneamente RDMA per l'intero dispositivo. L'abilitazione di un numero maggiore di funzioni virtuali (VF) limiterà le risorse RDMA disponibili per le funzioni fisiche (PF) e le altre funzioni virtuali.
   `Set-NetAdapterAdvancedProperty -Name <nome_dispositivo> -RegistryKeyword RdmaMaxVfsEnabled -RegistryValue <valore: 0 - 32>`
5. Disabilitare tutte le schede di rete delle funzioni fisiche (PF) sull'host e riabilitarle. Questa operazione è necessaria quando la parola chiave del registro "RdmaMaxVfsEnabled" viene cambiata o quando si crea o elimina un VMSwitch.
   `Get-NetAdapterRdma | Disable-NetAdapter`
   `Get-NetAdapterRdma | Enable-NetAdapter`
6. Creare schede di rete VM per macchine virtuali (VM) che richiedono il supporto di VF RDMA.
   `Add-VMNetworkAdapter -VMName <nome_vm> -VMNetworkAdapterName <nome_dispositivo> -SwitchName <nome_switch>`
7. Se si prevede di utilizzare Microsoft Windows 10 Creators Update (RS2) o versione successiva su una partizione guest, impostare il peso di RDMA sulla scheda di rete VM inserendo il seguente comando nell'host:
   `Set-VMNetworkAdapterRdma -VMName <nome_vm> -VMNetworkAdapterName <nome_dispositivo> -RdmaWeight 100`
8. Impostare il peso di SR-IOV sulla scheda di rete VM (nota: il peso di SR-IOV deve essere impostato a 0 prima di impostare RdmaWeight a 0):
   `Set-VMNetworkAdapter -VMName <nome_vm> -VMNetworkAdapterName <nome_dispositivo> -IovWeight 100`
9. Installare la scheda di rete VF con il programma di installazione di PROSET nella macchina virtuale.
10. Abilitare RDMA sul driver VF e sulla scheda di rete Hyper-V usando PowerShell nella macchina virtuale:
    `Set-NetAdapterAdvancedProperty -Name <nome_dispositivo> -RegistryKeyword RdmaVfEnabled -RegistryValue 1`
    `Get-NetAdapterRdma | Enable-NetAdapterRdma`

### Funzioni RDMA per NDK come SMB Direct (Server Message Block)

NDK consente ai componenti Windows (come lo storage SMB Direct) di utilizzare le funzioni di RDMA.

#### Test di NDK: Microsoft Windows SMB Direct con DiskSPD

Questa sezione descrive la procedura consigliata per testare il funzionamento e le prestazioni di RDMA per Ethernet Intel® sui sistemi operativi Microsoft Windows.

Notare che, poiché SMB Direct è un carico di lavoro di storage, le prestazioni del benchmark potrebbero essere limitate dalla velocità del dispositivo di archiviazione piuttosto che dall'interfaccia di rete oggetto del test. Intel consiglia di utilizzare il dispositivo di archiviazione più veloce disponibile al fine di verificare le capacità effettive dei dispositivi di rete testati.

Istruzioni per il test:

1. Configurare e collegare almeno due server che eseguono un sistema operativo Microsoft Windows Server supportato, con almeno un dispositivo Ethernet Intel® compatibile con RDMA per server.
2. Impostare una condivisione SMB sul sistema designato come server SMB. Notare che le prestazioni del benchmark potrebbero essere limitate dalla velocità del dispositivo di archiviazione piuttosto che dall'interfaccia di rete oggetto del test. La configurazione dello storage esula dall'ambito di questo documento. È possibile utilizzare il seguente comando PowerShell:
   `New-SmbShare -Name <nome_condivisione_SMB> -Path <percorso_file_condivisione_SMB> -FullAccess <nome_dominio>\Administrator,Everyone`
   Ad esempio:
   `New-SmbShare -Name CondivisioneRAMDISK -Path R:\RAMDISK -FullAccess group\Administrator,Everyone`
3. Scaricare e installare l'utility Microsoft Diskspd da questo sito: https://gallery.technet.microsoft.com/DiskSpd-a-robust-storage-6cd2f223
4. Utilizzando CMD o Powershell, inserire i comandi per passare alla cartella DiskSpd ed eseguire i test (consultare la documentazione di Diskspd per maggiori dettagli sui parametri).
   Ad esempio: impostare la dimensione del blocco a 4K, eseguire il test per 60 secondi, disabilitare la cache di tutto l'hardware e software, misurare e visualizzare le statistiche relative alla latenza, utilizzare 16 IO sovrapposti e 16 thread per destinazione, scritture 0% e letture 100% casuali e creare un file di test da 10 GB nel percorso "\\<SMBserverTestIP>\<SMBsharename>\test.dat":
   `.\diskspd.exe -b4K -d60 -h -L -o16 -t16 -r -w0 -c10G \\<SMBserverTestIP>\<SMBsharename>\test.dat`
5. Verificare che il traffico RDMA sia eseguito utilizzando contatori perfmon come "RDMA Activity" e "SMB Direct Connection". Per ulteriori dettagli, fare riferimento alla documentazione di Microsoft.

## Assistenza Clienti

- Sito Web principale del supporto tecnico di Intel: http://www.intel.com/p/it_IT/support/
- Informazioni sui prodotti di rete: https://www.intel.it/content/www/it/it/communications/network-transformation.html

## Informazioni legali/Declinazioni di responsabilità

Copyright (C) 2019 - 2022, Intel Corporation. Tutti i diritti riservati.

Intel Corporation non si assume alcuna responsabilità per eventuali errori o omissioni presenti in questo documento. Inoltre, Intel non si assume alcun impegno di aggiornare le informazioni ivi contenute.

Intel è un marchio di Intel Corporation negli Stati Uniti e in altri paesi.

*Altri marchi e altre denominazioni potrebbero essere rivendicati da terzi.

Il presente software viene fornito con una licenza e può soltanto essere utilizzato o copiato in base ai termini della licenza. Il contenuto di questo manuale viene fornito esclusivamente per uso informativo, è soggetto a cambiamenti senza preavviso e non va interpretato come impegno alcuno da parte di Intel Corporation. Intel Corporation non si assume alcuna responsabilità per eventuali errori o imprecisioni presenti in questo documento o nel software che potrebbe essere fornito insieme al documento. Fatta eccezione per quanto previsto da tale licenza, nessuna parte di questo documento può essere riprodotta, archiviata in un sistema di registrazione o trasmessa in alcuna forma o alcun mezzo senza il preventivo consenso scritto di Intel Corporation.